package kusterordonio.dominio;

import java.io.Serializable;
import java.util.Calendar;
import java.util.Date;

public class Ninio extends Persona implements Serializable{

    private String servicioSalud;
    private String idEnServicio;
    private Persona madre;
    private Persona padre;
    private Persona tutor;
    private Carne carne;

    public Ninio (){
    }

    public Ninio(String nombre, String apellidos, String cedula, Carne carne, Date fecha){
        super(nombre,apellidos,cedula);
        this.setFechaNac(fecha);
        this.setCarne(carne);
        this.setIdEnServicio("");
        this.setServicioSalud("");
        this.setDomiclio("");
        this.setLugarNac("");
        this.setTelefono("");
    }

    public Carne getCarne() {
        return carne;
    }

    public void setCarne(Carne carne) {
        this.carne = carne;
    }

    public String getIdEnServicio() {
        return idEnServicio;
    }

    public void setIdEnServicio(String idEnServicio) {
        this.idEnServicio = idEnServicio;
    }

    public Persona getMadre() {
        return madre;
    }

    public void setMadre(Persona madre) {
        this.madre = madre;
    }

    public Persona getPadre() {
        return padre;
    }

    public void setPadre(Persona padre) {
        this.padre = padre;
    }

    public String getServicioSalud() {
        return servicioSalud;
    }

    public void setServicioSalud(String servicioSalud) {
        this.servicioSalud = servicioSalud;
    }

    public Persona getTutor() {
        return tutor;
    }

    public void setTutor(Persona tutor) {
        this.tutor = tutor;
    }
    
    //Controla que unaFecha sea mayor o igual que la fecha de nacimiento y menor o igual a la de hoy
    public boolean controlFecha(Date unaFecha){
        return ((unaFecha.after(this.getFechaNac()) || unaFecha.compareTo(this.getFechaNac()) == 0) 
                && (unaFecha.before(Calendar.getInstance().getTime()) || unaFecha.compareTo(Calendar.getInstance().getTime()) == 0)) ;
    }
    
    //Calcula la edad en dias
    public int calculoEdad(Date fecha){
        //Convierte la diferencia entre una fecha y la fecha de nacimiento, de milisegundos(long) a días(int)
        int dias = (int)((fecha.getTime()- this.getFechaNac().getTime())/(1000*3600*24));
        return dias;
    }
    
    //Controla que la edad del niño no supere una edad determinada
    public boolean controlEdad(Date unaFecha, int unaEdad){
        boolean control = false;
        if (calculoEdad(unaFecha)<= unaEdad && controlFecha(unaFecha)){
            control = true;
        }
        return  control;
    }
    
    /**
     * Controla que el peso, la altura y el perímetro cefálico
     * hasta los dos años se encuentren dentro de un rango según la edad 
     */
    public boolean controlMedidasHastaDos(int edad, int peso, int talla, int pCefal){    
        boolean control = false;
        //recien nacido
        if (edad<31 && peso>400 && peso<10000 && talla>25
                && talla<60 && pCefal>25 && pCefal<40) control = true;
        //1 mes
        if (edad>30 && edad<61 && peso>2000 && peso<10000
                && talla>30 && talla<70 && pCefal>30 && pCefal<45) control = true;
        //2 meses
        if (edad>60 && edad<91 && peso>2500 && peso<10000
                && talla>35 && talla<75 && pCefal>30 && pCefal<47) control = true;
        //3 meses
        if (edad>91 && edad<121 && peso>3000 && peso<11000
                && talla>40 && talla<80 && pCefal>33 && pCefal<49) control = true;
        //4 meses
        if (edad>120 && edad<151 && peso>3500 && peso<11500
                && talla>40 && talla<80 && pCefal>34 && pCefal<50) control = true;
        //5 meses
        if (edad>150 && edad<181 && peso>4000 && peso<12000
                && talla>50 && talla<80 && pCefal>35 && pCefal<51) control = true;
        //6 meses
        if (edad>180 && edad<211 && peso>4500 && peso<12500
                && talla>50 && talla<85 && pCefal>36 && pCefal<52) control = true;
        //7 meses
        if (edad>210 && edad<241 && peso>5000 && peso<13000
                && talla>50 && talla<85 && pCefal>37 && pCefal<52) control = true;
        //8 meses
        if (edad>240 && edad<271 && peso>5000 && peso<13500
                && talla>55 && talla<85 && pCefal>37 && pCefal<52) control = true;
        //9 meses
        if (edad>270 && edad<301 && peso>5000 && peso<14000
                && talla>55 && talla<90 && pCefal>37 && pCefal<53) control = true;
        //10 meses
        if (edad>300 && edad<331 && peso>5500 && peso<14500
                && talla>55 && talla<90 && pCefal>38 && pCefal<53) control = true;
        //11 meses
        if (edad>330 && edad<365 && peso>5500 && peso<15000
                && talla>60 && talla<90 && pCefal>38 && pCefal<53) control = true;
        //1 año
        if (edad>364 && edad<397 && peso>6000 && peso<15500
                && talla>60 && talla<95 && pCefal>39 && pCefal<54) control = true;
        //13 meses
        if (edad>396 && edad<427 && peso>6000 && peso<16000
                && talla>60 && talla<95 && pCefal>39 && pCefal<54) control = true;
        //14 meses
        if (edad>426 && edad<457 && peso>6000 && peso<16500
                && talla>60 && talla<95 && pCefal>39 && pCefal<54) control = true;
        //15 meses
        if (edad>456 && edad<487 && peso>6500 && peso<17000
                && talla>60 && talla<100 && pCefal>39 && pCefal<54) control = true;
        //16 meses
        if (edad>486 && edad<517 && peso>6500 && peso<17500
                && talla>60 && talla<100 && pCefal>39 && pCefal<55) control = true;
        //17 meses
        if (edad>516 && edad<547 && peso>6500 && peso<18000
                && talla>60 && talla<100 && pCefal>40 && pCefal<55) control = true;
        //18 meses
        if (edad>546 && edad<577 && peso>6500 && peso<18500
                && talla>60 && talla<100 && pCefal>40 && pCefal<55) control = true;
        //19 meses
        if (edad>576 && edad<607 && peso>7000 && peso<19000
                && talla>60 && talla<105 && pCefal>40 && pCefal<55) control = true;
        //20 meses
        if (edad>606 && edad<637 && peso>7000 && peso<19500
                && talla>60 && talla<105 && pCefal>40 && pCefal<55) control = true;
        //21 meses
        if (edad>636 && edad<667 && peso>7000 && peso<20000
                && talla>60 && talla<105 && pCefal>40 && pCefal<56) control = true;
        //22 meses
        if (edad>666 && edad<697 && peso>7500 && peso<20500
                && talla>60 && talla<105 && pCefal>40 && pCefal<56) control = true;
        //23 meses
        if (edad>697 && edad<=730 && peso>7500 && peso<21000
                && talla>60 && talla<110 && pCefal>40 && pCefal<56) control = true; 
        
        return control;
    }
    
    /*
     * Controla que el peso, la altura y la presión arterial
     * de 2 a 12 años se encuentren dentro de un rango según la edad
     */
    public boolean controlMedidasDesdeDos(int edad, int peso, int talla, int pas, int pad){    
        boolean control = false;
        //no se controla mayor altura porque puede tratarse de un enano
        //los controles de pas y pad son amplios porque puede tratarse de un hipertenso o hipotenso
        if (talla>60 && pas>75 && pas<200 && pad>40 && pad<130) {
            //Hasta 3 años
            if (edad>730 && edad<1095 && talla<125 && peso>7500 && peso<25000) control = true;
            //Hasta 4 años
            if (edad>1094 && edad<1460 && talla<130 && peso>8000 && peso<30000) control = true;
            //Hasta 5 años
            if (edad>1459 && edad<1825 && talla<135 && peso>10000 && peso<35000) control = true;
            //Hasta 6 años
            if (edad>1824 && edad<2190 && talla<140 && peso>10000 && peso<40000) control = true;
            //Hasta 7 años
            if (edad>2189 && edad<2555 && talla<150 && peso>10000 && peso<45000) control = true;
            //Hasta 8 años
            if (edad>2554 && edad<2920 && talla<155 && peso>10000 && peso<55000) control = true;
            //Hasta 9 años
            if (edad>2919 && edad<3285 && talla<165 && peso>10000 && peso<60000) control = true;
            //Hasta 10 años
            if (edad>3284 && edad<3650 && talla<175 && peso>10000 && peso<70000) control = true;
            //Hasta 11 años
            if (edad>3649 && edad<4015 && talla<185 && peso>10000 && peso<75000) control = true;
            //Hasta 12 años
            if (edad>4014 && edad<4380 && talla<190 && peso>11000 && peso<85000) control = true;
        }
        return control;
    }
    
    public String toString(){
        return this.getApellidos()+", "+this.getNombre();
    }

}
